package qrcode

import (
	"bytes"
	"encoding/base64"
	"fmt"
	"github.com/google/uuid"
	"github.com/skip2/go-qrcode"
	"image/png"
)

// GenerateQRCode 生成二维码并返回Base64编码的字符串
// 参数：
//   - qrType: 二维码类型，可以是 "docker" 或 "k8s"
//
// 返回：
//   - Base64编码的二维码字符串
//   - qruid 用于标识二维码
//   - error错误信息
func GenerateQRCode(qrType string) (string, string, error) {
	fmt.Println("service层 进入二维码生成函数", qrType)
	// 定义基础URL路径
	baseURL := "http://129.211.69.41:8080/qrcode/"

	// 根据二维码类型拼接完整的URL
	var url string
	switch qrType {
	case "docker":
		url = fmt.Sprintf("%s%s", baseURL, "docker")
	case "k8s":
		url = fmt.Sprintf("%s%s", baseURL, "k8s")
	default:
		// 如果二维码类型不是 "docker" 或 "k8s"，返回错误
		return "", "", fmt.Errorf("未知的二维码类型: %s", qrType)
	}

	// 生成一个唯一的标识符，用于标识二维码
	qruid := uuid.New().String()

	fmt.Println("service层 开始生成二维码")
	// 生成二维码图像
	qr, err := qrcode.New(url, qrcode.Medium)
	if err != nil {
		return "", "", fmt.Errorf("生成二维码失败: %v", err)
	}

	// 创建一个内存中的图片缓冲区
	var buffer bytes.Buffer

	// 将二维码图像编码为PNG格式并写入缓冲区
	err = png.Encode(&buffer, qr.Image(256))
	if err != nil {
		return "", "", fmt.Errorf("编码二维码图像失败: %v", err)
	}

	// 将缓冲区的内容转换为Base64编码
	base64QR := base64.StdEncoding.EncodeToString(buffer.Bytes())

	// 返回Base64编码的二维码字符串和二维码的唯一标识符
	return base64QR, qruid, nil
}
